package com.mdp.im.core.plugin.api;

import com.alibaba.fastjson.JSONObject;
/**
 *
 * 消息发送到客户阶段划分 <br>
 * ->1客户发消息 <br>
 * ->2.0 执行beforePublish ->2.0.0进入上行队列，2.0.1执行beforeStore,存储消息到数据库,执行afterStore -> 2.1 执行afterPublish ->2.2上行队列存储中->2.3从上行队列取出<br>
 * ->4中转站处理<br>
 * ->5.0 beforeSubscribe ->5.1进入下行队列 -> 5.2下行队列存储->5.3下行队列取出 <br>
 * ->6.0 afterSubscribe->6.1 客户端接收消息 <br>
 *
 * 此插件为上行阶段插件。
 */
public interface PublishPlugin {
    /**
     * 在消息压入上行队列前执行<br>
     * @param message 上行消息
     * @return true 继续执行，false 则停止执行
     */
    public boolean beforePublish(JSONObject message);

    /**
     * 在压入上行队列后执行
     * @param isGo beforePublish的执行结果，也就是消息是否正常入栈
     * @param message 上行消息
     */
    public void afterPublish(boolean isGo,JSONObject message);

}
